package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 定义注解时，可以通过java提供的元注解对当前注解加以限制
 * 常见的元注解:
 * @Target:用于标注当前注解可以被应用的位置
 *         位置：放在类前面，变量前面（只作用与下边的一行代码），方法前，参数列表前
 *         对应枚举类:ElementType
 *         常见的值:
 *         ElementType.TYPE             类上，接口上使用
 *         ElementType.FIELD            在属性上使用
 *         ElementType.METHOD           在方法上使用
 *         ElementType.CONSTRUCTOR      在构造器上使用
 *         当前注解如果希望在多个地方使用时，以数组形式传入即可:
 *         @Target({ElementType.TYPE,ElementType.FIELD})
 *
 * @Retention:表示当前注解的保留级别
 *         可选项是使用枚举RetentionPolicy表示的
 *         值有三个:
 *         RetentionPolicy.SOURCE      :当前注解近保留在源代码中，编译后的字节码文件中没有该注解
 *         RetentionPolicy.CLASS       :注解可以保留在字节码文件中，但是不能为反射机制访问
 *         RetentionPolicy.RUNTIME     :该注解保留在字节码文件中且可以被反射机制访问
 */

//@Target({ElementType.TYPE,ElementType.FIELD})//可以定义多个，中间加个逗号继续添加，Target其实是数组，
@Target(ElementType.TYPE) //只加这个，在引用.isAnnotationPresent()方法时并不会正确返回值，还需要使用下注解后才可以正常判断某个类是否被注解了
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}
